perm filename NS3[F8,ALS] blob
sn#321380 filedate 1977-12-15 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ST
C00029 ENDMK
Cā;
ST
LIS H'7'
ADC Next one to blink
DS 0 Decrement counter
BNZ BLN3 Done?
BLN4 PK
INIT DC H'30'
DC H'10' OBJ1 L.O. RP
DC H'5F' TEXT LOW ORDER ROM
DC H'8C' OBJ0 H.O.RP+OLOR
DC H'8F' OBJ1 H.O.RP
DC H'EE'
DC H'08' OBJ0 DELTA X ---
DC H'08' OBJ1 DELTA X---
DC H'70' TEXT OBJECT DELTA X
TY0 DC H'3C' OBJ0 DELTA Y ----
DC H'14' OBJ1 DELTA Y ---
DC H'07' TEXT OBJECT DELTA Y
DC H'0D' OBJ0-X-CO
DC H'0D' OBJ1 X-CO
DC H'1C' TEXT OBJECT X COORD
DC H'48' OBJ0 Y-VALUE L.O.A
DC H'C0' OBJ1 Y-VALUE L.O.A
DC H'26' TEXT OBJECT Y VAL LO A
DC H'00' OBJ0 Y-VALUE H.0 &X-ORDER
DC H'01' OBJ1- Y-VAL H.O.$X-ORDER
DC H'82' TEXT OBJ INITIALLY OFF
UDIT DC H'30'
DC H'10'
DC H'5F'
DC H'8C'
DC H'8F'
DC H'EE'
DC H'3C'
DC H'14'
DC H'07'
TAB1 DC H'0F10' BYTE 3
DC H'0D70' BYTE 2
DC H'0CD0' BYTE 1
DC H'0C30' BYTE 0
TAB2 DC D'86' RELATIVE SQUARE POSITION TABLE
DC D'84'
DC D'82'
DC D'80'
DC D'07'
DC D'05'
DC D'03'
DC D'01'
KING DC B'01011010' KING'S CROWN
DC B'00111100'
DC B'00011000'
REDP DC B'00111100' RED PIECE
DC B'01111110'
DC B'01111110'
DC B'01111110'
DC B'00111100'
BLKP DC B'00111100' BLACK PIECE
DC B'01000010'
DC B'01000010'
DC B'01000010'
DC B'00111100'
*-*-*- YMF
YMF DC H'0513' Y0
DC H'0300' U-
DC H'2913' MO
DC H'2F0B' VE
DC H'00' -
DC H'1D' F
DC H'0109' IR
DC H'2107' ST
DC H'00' -
DC H'35' ?
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'0500' Y-
DC H'1309' OR
DC H'00' -
DC H'2B' N
*-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*- SKL Skill text
SKL DC H'3119' CH
DC H'1313' OO
DC H'210B' SE
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'150B' KE
DC H'0500' Y-
DC H'00' -
DC H'00' -
DC H'1F11' DA
DC H'2F0B' VE
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'1F' D
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DICK DC H'2B01' NI
DC H'1127' AL
DC H'27' L
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'2B' N
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
HARY DC H'1109' AR
DC H'0719' TH
DC H'0309' UR
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
DC H'11' A
DC H'00' -
DC H'00' -
DC H'00' -
DC H'00' -
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*MWAD*-WAIT, THEN UPDATE, AND KEEP THE*
*-*-*-*X ZOOM BIT SET PROPERLY DURING *
*-*-*-*DISPLAY MAINTENANCE.*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
MWAD LR K,P SAVE RETURN ADDRESS
PI PUSH AND PUSH ONTO STACK
PI DAI DISABLE INTERRUPTS
PI WAIT WAIT ON APPROPRIATE LINE
DCI CMRG DCO TO PROG COPY COMREG
LI MSK MASK IN
XM TURN OFF XZOOM
DCI H'8F7' IN THE UM1 COPY
ST ONLY
PI UDAT NOW DO UPDATE
LI XZOP SET LINE FOR RESTORE XZOOM
MWD1 DCI H'8FB' DCO TO CURRENT LINE
CM COMPARE
BNZ MWD1 REACHED IT YET?
DCI CMRG YES
LM
DCI H'8F7' NOW RESET UM1 COPY
ST
PI POPS POP RETURN ADDRESS
PK AND RETURN
*-*-*- Interrupt enable for update
ENIN LI INHR:
OUTS H'C'
LI INHR.
OUTS H'D' SET INTERRUPT VECTOR
DCI H'8F0'
LI ULIN
ST SET INTERRUPT LINE
DCI CMRG DCO TO PROG COPY COMREG
LR Q,DC SAVE ADDRESS IN Q RES
LIS H'8'
OM
LR DC,Q
ST IN PROGRAM COPY
DCI H'8F7'
ST DITTO UM1 COPY
LIS H'1'
OUTS H'E' ENABLE SMI...
EI ENABLE CPU
LR J,W SAVE SAME STATUS
POP AND RETURN
*-*-*- Interrupt disable
DAI DI DISABLE CPU INTERRUPT
LR J,W SET J ACCORDINGLY
DCI CMRG DCO TO PROG COPY COMREG
LR Q,DC SAVE ADDRESS
LIS H'8'
COM
NM TURN OFF BIT
LR DC,Q IN THE
ST PROGRAM COPY,
DCI H'8F7'
ST AND THE UM1 COPY
CLR
OUTS H'E' NOW DISABLE SMI
POP AND RETURN
*-*-*-* SCRD SCRATCHPAD TO RAM DIRECT
*
SCRD LR K,P SAVE RETURN ADDRESS
LISU PLOC
LISL 0
SCD1 LR A,I
ST
BR7 SCD1
LR A,I
ST
LISU KLOC
SCD2 LR A,I
ST
BR7 SCD2
LR A,I
ST
PK DONE, SO RETURN
*-*-INHR Interrupt handler, saves and restores data
INHR LR 8,A SAVE ACC
LR A,IS
LISU 6
LISL 0
LR I,A SAVE ISAR IN REG O'60'
LR A,HU
LR I,A SAVE HU IN REG O'61'
LR A,HL
LR I,A SAVE HL IN REG O'62'
LR A,J
LR I,A SAVE J REG IN REG O'63'
LR H,DC SAVE OLD DCO
DCI RGSV DCO TO SAVE AREA START
LR A,HU
ST
LR A,HL
ST SAVE OLD DCO IN RGSV,RGSV+1
XDC
LR H,DC
XDC
LR A,HU
ST
LR A,HL
ST SAVE OLD DC1 IN RGSV+2,RGSV+3
LR A,KU
ST
LR A,KL
ST SAVE K REG IN RGSV+4,RGSV+5
LR K,P PC1 INTO K REGISTER
LR A,KU
ST
LR A,KL
ST PC1 INTO RGSV+6,RGSV+7
LR J,W SAVE OLD STATUS
LISU 2
LISL 3
INH2 LR A,D
ST SP23,22,21,20 IN, RESP.
BR7 INH2 RGSV+8,+9,+A,+B
DCI CMRG DCO TO COMMAND REGISTER
LI MSK MASK ON
XM TURN OFF X ZOOM BIT
DCI H'8F7' IN THE UM1
ST COMMAND REGISTER
PI UDAT UPDATE UM1 DISPLAY REGISTERS
LI XZOP SET LINE FOR XZOOM ON
INH1 DCI H'8FB' DCO TO CURRENT Y LO
CM COMPARE
BNZ INH1 DIFFERENT?
DCI CMRG NO. RESTORE X ZOOM
LM FROM OLD COPY
DCI H'8F7' TO THE UM1 COPY
ST
*
* RESTORE ALL REGISTERS
*
DCI RGSV DCO TO SAVE AREA
LM
LR HU,A
LM
LR HL,A OLD DCO TO H REG
XDC
LR DC,H NOW INTO DCO
XDC AND INTO DC1
LM
LR HU,A
LM
LR HL,A OLD DC1 INTO H REGISTER
LIS H'2'
ADC BYPASS K FOR A MOMENT
LM
LR KU,A
LM
LR KL,A
LR P,K RESTORE PC1
LISU 2
LISL 3
INH3 LM RESTORE SP20-23 FROM
LR D,A RGSV+8,+9,+A,+B
BR7 INH3
DCI RGSV+4
LM
LR KU,A
LM
LR KL,A RESTORE K REGISTER
LR DC,H RESTORE DC1
XDC AND SET DCO&DC1 PROPERLY
LR W,J NOW RESTORE STATUS AT ENTRY
*
* NOW RESTORE J,H,A FROM SCRATCH PAD
*
LISU 6
LISL 3
LR A,D GET J
LR J,A
LR A,D GET HL
LR HL,A
LR A,D
LR HU,A RESTORE HU
LR A,D GET ISAR
LR IS,A RESTORE ISAR
LR A,8 RESTORE A
EI INT. ENABLE
POP
*-*-*- Initial moves for red
REDM DC B'00000111' 3 pieces
DC B'00001010' Byte 2, RB
DC B'00001111' 4 pieces
DC B'00001011' Byte 2, LB
DC H'00'
*-*-*-*-*-*-*-*-*-*
*First replies (maximum of 4 each)
BOK2 DC H'33' 24,20 24-20 To 12-16
DC H'33' 24-20, 24-20
DC H'43' 23-19, 24-20 To 11-15
DC H'20' 22-17, 24-19
DC H'22' 22-17, 22-17 To 10-14
DC H'22' 22-17, 22-17
DC H'55' 22-18, 22-18 To 9-13
DC H'55' 22-18, 22-18
DC H'31' 24-20, 23-18 To 11-16
DC H'45' 24-19, 22-18
DC H'66' 21-17, 21-17 To 10-15
DC H'66' 21-17, 21-17
DC H'55' 22-18, 22-18 To 9-14
DC H'55' 22-18, 22-18
*-*-*-
WAST LR K,P Delay loop to WASTE some time
WAS2 LIS H'F'
LR 1,A
WAS3 CLR
LR 2,A
WAS4 DS 2
BNZ WAS4
DS 1
BNZ WAS3
PK
*
STOP DCI SCOR What kind of score?
LM
CI H'3F' Does the machine have a win?
BNZ STO1 No
LM Yes, at what ply?
COM
INC
LR 4,A
LIS H'7' "I can win in "
BR STO2
STO1 CI H'C1' Does player have a win?
BNZ STO6 No
LM Yes, at what ply?
LR 4,A
LIS H'8' "You can win in "
STO2 LR 0,A
PI WMC Write message
PI MWAD Wait then update
LR A,4
AI H'3F'
CI H'9'
BC STO5 OVER 9?
LIS H'9' YES, SET TO 9
STO5 LR TEMP,A
LR 4,A SET NUMBER IN R4
PI WDG Report ply
PI MWAD Wait then update
PI ENIN Enable interrupts
CLR
LR 3,A
STO3 PI WAST Leave message up awhile
DS 3
BNZ STO3
LR A,4
CI H'2' Early warning only?
BC STO4
STO6 JMP AFTT YES
STO4 PI MWAD Do wait, then update
DCI H'872'
LI H'82'
ST TURN MESSAGE OFF
LR A,0 Get message type
LR 6,A And save in REG 6
ZS0 LIS H'D'
LR 1,A Set NOTE COUNT (14 NOTES)
ZS1 LIS H'7' Set mask
XS 6
DCI TUN2 Default tune--for Player win
BNZ ZS2 Computer wins?
DCI TUN1 Yes, set tune accordingly
ZS2 LR A,1 Get current NOTE COUNT
SL 1
AS 1 Mult by three for proper offset
ADC And add it in
LISU 4
LISL 4
LM Get DELTA LINE count
LR D,A Into SP44
LM
LR S,A Get LEVEL into SP43
LM And get DURATION into
LR 5,A REG 5
PI SNE Enable sound
ZS3 PI WAUD And wait
DS 5 Decrement DURATION
BNZ ZS3 Done with NOTE?
DS 1 Yes, decrement NOTE COUNT
BP ZS1 Done all of SONG?
LI H'A0' YES
LR 1,A Set counter
ZS4 PI MWAD Delay
DS 1 For approximately
BNZ ZS4 2.7 Seconds
JMP H'4000' And return to RESIDENT
FLSH DCI SELX DCO TO MOVE NUMBER
LIS H'2'
CM
BC FLS5 PAST BOOK MOVES?
PI BORD NO, JUST DISPLAY BOARD
FLS6 JMP PMOV AND GO PLAYERS MOVE
FLS5 PI MWAD WAIT, THEN UPDATE
DCI H'872' DISABLING INT. AT SAME TIME
LI H'82'
ST TURN OFF MESSAGE OBJECT
LISU 4
LISL 4
LI H'30'
LR D,A SET DELTA LINE
LIS H'3'
LR S,A SET LEVEL
PI SNE ENABLE SOUND
LIS H'F'
LR 6,A SET DURATION
FLS1 PI WAUD WAIT, THEN UPDATE
DS 6
BNZ FLS1 BEEPED LONG ENOUGH?
PI DAI YES, DISABLE SOUND
LIS H'5'
LR 6,A SET BLINK COUNT
FLS2 DCI TRE2
PI RASC GET BOARD AFTER PLAYER MOVE
DCI H'0E30' DCO TO TEMP AREA
LR Q,DC SAVE ADDRESS
PI SCRA SCRATCH TO RAM, REVERSED
LR DC,Q RECOVER ADDRESS
PI RASC AND INTO SCRATCHPAD
PI WAUD NOW DO UPDATE
PI ENIN
PI BORD DISPLAY BOARD
LI H'20'
LR 3,A SET COUNTER
FLS3 PI MWAD WAIT A BIT
DS 3
BNZ FLS3
DCI TREE
PI RASC BOARD AFTER MACHINE MOVE
PI ENIN
PI BORD DISPLAYED
LI H'20'
LR 3,A
FLS4 PI MWAD WAIT A MOMENT
DS 3
BNZ FLS4
DS 6
BNZ FLS2 DONE ENOUGH TIMES?
BR FLS6 YES,GOTO PLAYER MOVE
*-*-*-
SELE PI WAST TIMING DELAY
SEL2 LISU PLOC
LISL 0
LR DC,H
LIS H'C' To get MOVE byte
ADC
LM
LR 0,A Save it temporarily
NS 0 To set status byte
BNZ SEL3
JMP NEXT To get next MOVE byte
SEL3 CLR
COM -1 in A
ADC Get back to move byte
AS 0
NS 0 Remove right-most on-bit
ST Put remaining bits back (and index)
XS 0 This gets the extracted bit
LR 6,A Save it in 6
LM Now get the byte designation
SEL4 LR 5,A
SR 1
SR 1
NI H'3' Separate the byte indicator part
LR 4,A Save it in 4
LR A,5
NI H'13' Separate the JUMP bit and the direction
LR 5,A Save them in 5
DELE LI ISA Process Active and Kings for source dele
AS 4 Add byte #
LR IS,A Get to initial byte
LR A,S
LR 3,A
XS 6 Delete moving piece
LR S,A from byte
LISU KLOC To get to corresponding KING byte
LR A,S
NS 6 Was the piece a king?
BZ DEL2
XS S If it was delete king bit
LR S,A
LIS H'7' Non-zero in 2 for king
DEL2 LR 2,A 0 for man, 7 for king, (later 1 for prom
LISU PLOC Back to active section
*Now locate captured piece if jump or find destination in normal move
LR A,6 Recall MOVE bit
SR 4
BZ INRH Bit was in right half of byte
INLH LR 3,A Save partially shifted MOVE bit
LIS H'1' Get direction
NS 5 To test right-most bit
BZ INL2 RF or LB move where 4 shift is correct
LR A,3
SR 1 LF and LB require an additional shift
LR 3,A
INL2 LIS H'2' Now test for fore or aft
NS 5
BZ BOTH Forward move, no byte shift needed
LR A,D Only to decrement ISAR
INL3 BR BOTH
*
INRH LR A,6 Get MOVE bit again
SL 4 Left shift if in right half
LR 3,A Save partially shifted MOVE bit
LIS H'1'
NS 5 Get direction
BNZ INR2 LF or LB where 4 shift is correct
LR A,3
SL 1 RF and RB require an additional shift
LR 3,A
INR2 LIS H'2' Now test fore and aft
NS 5